﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;


public partial class stock_registro_producto : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        Menu m = Session["Menu"] as Menu;
        if (m == null) Response.Redirect("../login.aspx");
        if (!m.Stock)
        {
            Response.Redirect("../home/home.aspx");
        }


        desactivarCampos();
        SetFocus(btnNuevo);

        Menu menuLateral = new Menu();
        lblMenuLateral.Text = menuLateral.MenuStockDetalles();

        if (!Page.IsPostBack)
        {
            llenarDatosGrid(); //llenamos el grid

            //cargamos las marcas
            DataSet marcas = new Marca().Listar();
            ddlMarca.DataSource = marcas;
            ddlMarca.DataValueField = "id_marca";
            ddlMarca.DataTextField = "marca";
            ddlMarca.DataBind();

            ddlMarcaBuscar.DataSource = marcas;
            ddlMarcaBuscar.DataValueField = "id_marca";
            ddlMarcaBuscar.DataTextField = "marca";
            ddlMarcaBuscar.DataBind();
            ddlMarcaBuscar.Items.Insert(0, "%");
         
            


            //cargamos los tipos de productos
            DataSet tipoProductos = new TipoProducto().Listar();
            ddlTipoProducto.DataSource = tipoProductos;
            ddlTipoProducto.DataValueField = "id_tipo_producto";
            ddlTipoProducto.DataTextField = "descripcion";
            ddlTipoProducto.DataBind();


            ddlTipoProductoBuscar.DataSource = tipoProductos;
            ddlTipoProductoBuscar.DataValueField = "id_tipo_producto";
            ddlTipoProductoBuscar.DataTextField = "descripcion";
            ddlTipoProductoBuscar.DataBind();
            ddlTipoProductoBuscar.Items.Insert(0, "%");


            //cargamos los iva's
            DataSet ivas = new Iva().Listar();
            ddlIva.DataSource = ivas;
            ddlIva.DataValueField = "id_iva";
            ddlIva.DataTextField = "porcentaje";
            ddlIva.DataBind();


        }
    }

    /*************Botones***********************/

    protected void btnNuevo_Click(object sender, EventArgs e)
    {
        activarCampos();
        limpiarCampos();
        btnGuardar.Visible = true;
        btnNuevo.Visible = false;
        btnCancelar.Enabled = true;
        btnBuscar.Enabled = false;
        SetFocus(ddlTipoProducto);
        lblMensaje.Text = "";


    }
    protected void btnCancelar_Click(object sender, EventArgs e)
    {
        btnNuevo.Visible = true;
        btnCancelar.Enabled = false;
        btnGuardar.Visible = false;
        btnGuardarModif.Visible = false;
        btnBuscar.Enabled = true;
        limpiarCampos();
        desactivarCampos();
    }

    protected void btnGuardar_Click(object sender, EventArgs e)
    {
        Producto p = new Producto();

        cargarDesdeInterfaz(p);

        try
        {
            p.Guardar();
            lblMensaje.Text = "Registrado correctamente";
            limpiarCampos();
            llenarDatosGrid();
        }
        catch (ConexionException ex)
        {
            lblMensaje.Text = ex.Message;
        }

        desactivarCampos();
        btnGuardar.Visible = false;
        btnCancelar.Enabled = false;
        btnNuevo.Visible = true;
        btnBuscar.Enabled = true;



    }

    protected void btnAceptarEliminar_Click(object sender, EventArgs e)
    {
        Producto p = Session["ProductoSeleccionado"] as Producto;
        try
        {
            p.Borrar();
            lblMensaje.Text = "Borrado correctamente";
            btnNuevo.Visible = true;
            btnCancelar.Enabled = false;
            btnGuardar.Visible = false;
            btnGuardarModif.Visible = false;
            btnBuscar.Enabled = true;

            limpiarCampos();
            llenarDatosGrid();

        }
        catch (ConexionException ex)
        {
            lblMensaje.Text = ex.Message;
        }
    }

    protected void btnBuscar_Click(object sender, EventArgs e)
    {
        lblMensaje.Text = "";
        SetFocus(ddlMarcaBuscar);
        mpeBuscar.Show();

    }

    protected void btnGuardarModif_Click(Object sender, EventArgs e)
    {

        Producto p = Session["ProductoSeleccionado"] as Producto;
        cargarDesdeInterfaz(p);


        try
        {
            p.Actualizar();
            lblMensaje.Text = "Actualizado correctamente";
            btnGuardarModif.Visible = false;
            btnNuevo.Visible = true;
            btnCancelar.Enabled = false;
            btnGuardar.Visible = false;
            btnBuscar.Enabled = true;
            llenarDatosGrid();
            limpiarCampos();
        }
        catch (ConexionException ex)
        {
            lblMensaje.Text = ex.Message;
        }


    }



    /*****************funciones auxiliares*****************/

    private void cargarDesdeInterfaz(Producto p)
    {
        p.IdTipoProducto = Convert.ToInt32(ddlTipoProducto.SelectedValue);
        p.IdMarca = Convert.ToInt32(ddlMarca.SelectedValue);
        p.Descripcion = txtDescripcion.Text;
        try
        {
            p.Codigo = Convert.ToInt32(txtCodigo.Text);
        }
        catch {
            p.Codigo = 0;
        }
        
        
        p.PrecioCompra = txtPrecioCompra.Text;
        p.PrecioVenta = txtPrecioVenta.Text;
        p.IdIva = Convert.ToInt32(ddlIva.SelectedValue);
        p.Estado = "a";//activo por defecto        

    }


    private void desactivarCampos()
    {
        txtDescripcion.Enabled = false;
        txtCodigo.Enabled = false;
        txtCodigo.Enabled = false;
        txtPrecioCompra.Enabled = false;
        txtPrecioVenta.Enabled = false;
        ddlTipoProducto.Enabled = false;
        ddlMarca.Enabled = false;
        ddlIva.Enabled = false;
    }

    private void activarCampos()
    {
        txtDescripcion.Enabled = true;
        txtCodigo.Enabled = true;
        txtCodigo.Enabled = true;
        txtPrecioCompra.Enabled = true;
        txtPrecioVenta.Enabled = true;
        ddlTipoProducto.Enabled = true;
        ddlMarca.Enabled = true;
        ddlIva.Enabled = true;
    }

    private void limpiarCampos()
    {
        txtDescripcion.Text = "";
    }


    /**************************Controles de busqueda*****************/

    protected void btnBuscarPopub_Click(object sender, EventArgs e)
    {

        llenarDatosGrid();

    }

    protected void btnLimpiarCampos_Click(object sender, EventArgs e)
    {

        limpiarCamposBuscar();
        mpeBuscar.Show();
    }


    private void llenarDatosGrid()
    {
        Producto p = new Producto();
        Session["Producto"] = p; //guardo la marca en la session para utilizar sus metodos despues

        String tipoProducto;
        String marca;
        String descripcion = txtDescripcionBuscar.Text;

        try
        {
            tipoProducto = ddlTipoProductoBuscar.SelectedItem.Text;
            
        }
        catch {
            tipoProducto = ddlTipoProductoBuscar.Text;
        }
        try
        {
            marca = ddlMarcaBuscar.SelectedItem.Text;
           
        }
        catch
        {
            marca = ddlMarcaBuscar.Text;
        }

        DataSet ds = p.Buscar(tipoProducto, marca, descripcion);       
        gvProductos.DataSource = ds.Tables[0];
       
        gvProductos.DataBind();
        Session["Productos"] = ds.Tables[0]; //Almaceno el DataSet en una variable de Session para usarla el Sorting del GridView

    }

    protected void gvProductos_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "editar" || e.CommandName == "borrar")
        {
            gvProductos.SelectedIndex = Convert.ToInt32(e.CommandArgument);
            int idProducto = Convert.ToInt32(gvProductos.SelectedDataKey.Value);

            //Recupera la tabla de la session
            DataTable dt = Session["Productos"] as DataTable;

            //Busca en la tabla el row con el id de la marca seleccionada
            DataRow[] rows = dt.Select("id_producto = " + idProducto + " ");

            //Creamos un producto con los datos cargados del grid
            Producto p = new Producto();
            p.Id = idProducto;

            p.Descripcion = rows[0]["descripcion"].ToString();
            p.IdMarca = Convert.ToInt32(rows[0]["id_marca"].ToString());
            p.IdTipoProducto = Convert.ToInt32(rows[0]["id_tipo_producto"].ToString());
            p.IdIva = Convert.ToInt32(rows[0]["id_iva"].ToString());
            p.Codigo = Convert.ToInt32(rows[0]["codigo"].ToString());
            p.PrecioCompra = rows[0]["precio_compra"].ToString();
            
            p.PrecioVenta = rows[0]["precio_venta"].ToString();


            //Guardamos el0 seleccionado en la session para poder modificarlo o eliminarlo despues
            Session["ProductoSeleccionado"] = p;


        }

        if (e.CommandName == "editar")
        {
            cargarSeleccionado(); //cargamos a la interfaz los datos del seleccionado
            activarCampos();
            btnGuardarModif.Visible = true;
            btnCancelar.Visible = true;
            SetFocus(txtDescripcion);
            lblMensaje.Text = "";

        }

        if (e.CommandName == "borrar")
        {
            mpeEliminar.Show();
        }
    }
    private void limpiarCamposBuscar()
    {
        ddlMarcaBuscar.SelectedIndex=0;
        ddlTipoProductoBuscar.SelectedIndex = 0;
        txtDescripcionBuscar.Text = "";
    }


    protected void gvProductos_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        gvProductos.PageIndex = e.NewPageIndex;
        gvProductos.DataSource = Session["Productos"];
        gvProductos.DataBind();

    }


    //Ordena el GridView de Busqueda
    protected void gvProductos_Sorting(object sender, GridViewSortEventArgs e)
    {

        //Recupera la tabla de la session
        DataTable dt = Session["Productos"] as DataTable;

        if (dt != null)
        {

            //Ordena los datos
            dt.DefaultView.Sort = e.SortExpression + " " + GetSortDirection(e.SortExpression);
            gvProductos.DataSource = Session["Productos"];
            gvProductos.DataBind();
        }
    }

    private string GetSortDirection(string column)
    {
        // Por defecto, seteamos la direccion como ascendente
        string sortDirection = "ASC";

        // Recuparea la ultima columna que fue ordenada
        string sortExpression = ViewState["SortExpression"] as string;

        if (sortExpression != null)
        {

            if (sortExpression == column)
            {
                string lastDirection = ViewState["SortDirection"] as string;
                if ((lastDirection != null) && (lastDirection == "ASC"))
                {
                    sortDirection = "DESC";
                }
            }
        }
        // Guarda los nuevos valores en el ViewState
        ViewState["SortDirection"] = sortDirection;
        ViewState["SortExpression"] = column;

        return sortDirection;
    }
    /**
    * Carga la que se había selecionado en la busqueda a la interfaz
    */
    private void cargarSeleccionado()
    {
        Producto p = Session["ProductoSeleccionado"] as Producto;

        txtDescripcion.Text = p.Descripcion;
        ddlTipoProducto.SelectedValue = p.IdTipoProducto.ToString();
        ddlMarca.SelectedValue = p.IdMarca.ToString();
        txtPrecioVenta.Text = p.PrecioVenta.ToString();
        txtPrecioCompra.Text = p.PrecioCompra.ToString();
        txtCodigo.Text = p.Codigo.ToString();
        ddlIva.SelectedValue = p.IdIva.ToString();

        txtPrecioCompra.Text = ComaPorPunto(txtPrecioCompra.Text);
        txtPrecioVenta.Text = ComaPorPunto(txtPrecioVenta.Text);
        
        btnGuardarModif.Visible = false;
        btnCancelar.Visible = true;
        btnCancelar.Enabled = true;
        btnGuardar.Visible = false;
        btnNuevo.Visible = false;

    }
    private String ComaPorPunto(String cadena) 
    {
        char[]cad = cadena.ToCharArray();
        
        for (int i = 0; i < cadena.Length; i++) 
        {
            if (cadena[i] == ',')
            {
                cad[i] = '.';
            }
           
        }
        string c = new string(cad);
        return c;
    }
}
